home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 2004 #11 / Amiga Plus CD - 2004 - No. 11.iso / AmiSoft / Util / conv / Acvt.lha / Acvt 1.07 / sources / autil.cpp < prev    next >
C/C++ Source or Header  |  2001-03-08  |  3KB  |  140 lines

  1. //    This program is free software; you can redistribute it and/or modify
  2. //    it under the terms of the GNU General Public License as published by
  3. //    the Free Software Foundation; either version 2 of the License, or
  4. //    any later version.
  5. //
  6. //    This program is distributed in the hope that it will be useful,
  7. //    but WITHOUT ANY WARRANTY; without even the implied warranty of
  8. //    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  9. //    GNU General Public License for more details.
  10. //
  11. //    You should have received a copy of the GNU General Public License
  12. //    along with this program; if not, write to the Free Software
  13. //    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  14. //
  15.  
  16. #include "autil.h"
  17.  
  18. void Peecize( char* szPC, char* szAtari );
  19.  
  20. //converts 8+3 Atari fname to it's PC equivalent
  21. void ADos2MsDos( char* szMsDos, char* szADos )
  22. {
  23.     char szName[ 9 ];
  24.     strncpy( szName, szADos, 8 );
  25.     szName[ 8 ] = '\0';
  26.  
  27.     char szExt[ 4 ];
  28.     strncpy( szExt, szADos + 8, 3 );
  29.     szExt[ 3 ] = '\0';
  30.  
  31.     Peecize( szName, szName );
  32.     Peecize( szExt, szExt );
  33.  
  34.     if ( !*szName )
  35.         strcpy( szName, "out" );
  36.  
  37.     strcpy( szMsDos, szName );
  38.  
  39.     if ( *szExt )
  40.     {
  41.         strcat( szMsDos, "." );
  42.         strcat( szMsDos, szExt );
  43.     }
  44. }
  45.  
  46. //kind of 'good-for-dos' filter
  47. void Peecize( char* szPC, char* szAtari )
  48. {
  49.     int iLen = strlen( szAtari );
  50.  
  51.     while( iLen-- )
  52.     {
  53.         //filter off the inverse chars
  54.         char c = *( szAtari++ ) & 0x7F;
  55.  
  56.         //filter spaces
  57.         if ( c == ' ' )
  58.             continue;
  59.  
  60.         //filter unprintables
  61.         if ( !isprint( c ) )
  62.             c = '_';
  63.  
  64.         //filter other 'ugly' characters :)
  65.         switch( c )
  66.         {
  67.             case '*':
  68.             case ':':
  69.             case '\"':
  70.             case ',':
  71.             case '.':
  72.             case '|':
  73.             case '?':
  74.             case '/':
  75.             case '\\':
  76.                 c = '_';
  77.                 break;
  78.         }
  79.  
  80.         *( szPC++ ) = c;
  81.     }
  82.  
  83.     *szPC = '\0';
  84. }
  85.  
  86.  
  87. //converts any Atari name to it's PC equivalent
  88. void GuessBestFnameFromAtari( char* szDest, char* szSrc, char* szExt )
  89. {
  90.     char szTemp[ 255 ];
  91.     Peecize( szTemp, szSrc );
  92.     GuessBestFnameFromPC( szDest, szTemp, szExt );
  93. }
  94.  
  95. //changes file extension
  96. void GuessBestFnameFromPC( char* szDest, char* szSrc, char* szExt, char* szAdd )
  97. {
  98.     char szTemp[ 255 ];
  99.  
  100.     char szGoodSrc[ 255 ];
  101.  
  102.     _fixpath( szSrc, szGoodSrc );
  103.  
  104.     char* szSl = strrchr( szGoodSrc, '/' );
  105.  
  106.     if ( szSl )
  107.         strcpy( szTemp, szSl + 1 );
  108.     else
  109.         strcpy( szTemp, szGoodSrc );
  110.  
  111.     char* szDot = strrchr( szTemp, '.' );
  112.  
  113.     if ( szDot )
  114.         *szDot = '\0';
  115.  
  116.     if ( !strlen( szTemp ) )
  117.         strcpy( szTemp, "out" );
  118.  
  119.     strcpy( szDest, szTemp );
  120.  
  121.     if ( szAdd )
  122.         strcat( szDest, szAdd );
  123.  
  124.     strcat( szDest, "." );
  125.     strcat( szDest, szExt );
  126. }
  127.  
  128. //is memory block empty?
  129. BOOL IsBlockEmpty( BYTE* p, int iLen )
  130. {
  131.     while( iLen-- )
  132.     {
  133.         if ( *( p++ ) )
  134.             return FALSE;
  135.     }
  136.  
  137.     return TRUE;
  138. }
  139.  
  140.